#pragma once

struct LightSource 
{
	Vector4 ambient;          // Aclarri   
	Vector4 diffuse;            // Dcli   
	Vector4 specular;          // Scli   
	Vector4 position;           // Ppli   
	Vector4 halfVector;       // Derived: Hi   
	Vector3 spotDirection;   // Sdli   
	float spotExponent;  // Srli   
	float spotCutoff;      // Crli                     
	// (range: [0.0,90.0], 180.0)   
	float spotCosCutoff; // Derived: cos(Crli) 
	// (range: [1.0,0.0],-1.0)   
	float constantAttenuation;   // K0   
	float linearAttenuation;       // K1   
	float quadraticAttenuation; // K2  

};

struct Material
{   
	Vector4 emission;    // Ecm   
	Vector4 ambient;     // Acm   
	Vector4 diffuse;       // Dcm   
	Vector4 specular;    // Scm   
	float shininess;   // Srm //? 
};  

struct LightModel
{
	Vector4 ambient;  // Acs
};

struct LightProducts 
{   
   Vector4 ambient;    // Acm * Acli    
   Vector4 diffuse;      // Dcm * Dcli   
   Vector4 specular;   // Scm * Scli  
};  

struct LightModelProducts  
{    
   Vector4 sceneColor; // Derived.  Ecm + Acm * Acs  
};